PrecSezione 18.2: Codifica di immagine SuCapitolo 18: Codifica di sorgente multimediale Capitolo: BibliografiaSegue

## 18.3Codifica video↓

In accordo al metodo di realizzazione dei segnali video analogici, in cui i singoli quadri sono codificati indipendentemente gli uni dagli altri, la codifica video digitale può essere realizzata semplicemente applicando tecniche di codifica di immagine (come jpeg) ad ognuno dei quadri che costituiscono la sequenza video: questo tipo di approccio prende il nome di moving jpeg o mjpeg↓.
D’altra parte, i quadri relativi ad istanti temporali vicini sono spesso molto simili tra loro, anche se quanto siano simili, e per quanto tempo, dipende dal tipo di filmato. La presenza di memoria nella sorgente determina quindi la possibilità di ridurre il tasso informativo prodotto dalla codifica ricorrendo a tecniche predittive, tentando quindi di stimare il movimento presente in quadri contigui, e trasmettere solo l’informazione necessaria a compensare l’errore di predizione.Nella parte destra di fig. 18.35↑ è mostrata l’immagine differenza ΔY tra la componente di luminanza di due quadri consecutivi, consentendo di apprezzarne la relativa semplicità. Considerando poi che alcune regioni si sono mosse più di altre, il quadro da codificare è scomposto in sottoimmagini, per ognuna delle quali si ha un diverso spostamento, e viene calcolata una specifica differenza rispetto alla sotto-immagine precedente (e spostata); questa tecnica prende il nome di compensazione del movimento.
Figure 18.35Due fotogrammi consecutivi, e la differenza tra i rispettivi valori di luminanza
Tipo di quadro
Come abbiamo fatto notare al § 17.1.1.6↑, le tecniche di codifica predittiva sono particolarmente sensibili agli errori di trasmissione, che possono causare una perdita di sincronismo tra i predittori di trasmissione e ricezione, e quindi l’impossibilità di ricostruire la restante parte di segnale. Per questo, nella codifica video sono presenti dei quadri di riferimento in corrispondenza biunivoca con un unico quadro di partenza, detti intracoded frames↓ o I-frames, che permettono al ricevitore di ri-partire da una condizione nota. Tra due quadri I sono poi presenti un certo numero di quadri P (predicted) come in fig. 18.36↓a, oltre che quadri B (bidirectional↓) come in fig. 18.36↓b, e che corrispondono rispettivamente alla codifica della compensazione del movimento calcolato a partire da un unico quadro precedente, o da una coppia di quadri passato e futuro.
Figure 18.36Esempi di sequenze di quadri con a) solo quadri di tipo I e P; b) quadri di tipo I, P e B
I quadri I sono codificati mediante l’algoritmo jpeg, usando lo stesso coefficiente di quantizzazione per tutti i pixel delle DCT, conseguendo un rapporto di compressione relativamente basso, e sono inseriti a cadenza fissa con un periodo N tipicamente compreso tra 3 e 12: la sequenza di quadri compresi tra due quadri I è detta group of pictures o gop↓. Come mostrato in figura 18.36↑, la codifica di quadri P può dipendere dal quadro I immediantamente precedente, o dalla ricostruzione di un precedente quadro P, ottenendo un fattore di compressione maggiore che per i quadri I; la distanza temporale tra P e l’originale I è detta intervallo di predizione↓, indicato con M.
Per realizzare la compensazione del movimento, ogni regione del nuovo quadro è confrontata con regioni limitrofe del quadro precedente, riducendo così la complessità di ricerca. Nel caso dei quadri B la ricerca delle regioni simili è invece svolta rispetto ai quadri I (o P) situati sia nel passato che al futuro, migliorando la precisione della stima di movimento, e conseguendo rapporti di compressione ancora maggiori, a patto di subire un aumento del ritardo di codifica, legato al dover attendere un quadro futuro.
Allo scopo di ridurre il ritardo di decodifica, la sequenza di quadri viene trasmessa con un ordine diverso da quello dei quadri orginali, consentendo ai quadri B di essere riprodotti non appena ricevuti, e non dopo la ricezione del quadro futuro da cui dipendono. Pertanto, se la sequenza originale è ad esempio
IBBPBBPBBIBBP...
questa verrà trasmessa nell’ordine
IPBBPBBIBBPBB...
Stima di movimento↓ e compensazione
Specifichiamo innanzitutto cosa intendere con il termine regione prima usato per definire il dominio dell’operazione di confronto necessaria alla stima di movimento. Come mostrato in fig. 18.37↓a, considerando uno suddivisione in componenti Y Cb Cr ed un sottocampionamento 4:1:1, il quadro originale è suddiviso in N righe e M colonne di macroblocchi di 16x16 pixel, ed ogni macroblocco è rappresentato da sei blocchi 8x8 pixel, di cui quattro blocchi per la luminanza, più due blocchi per le componenti di crominanza; ogni blocco 8x8 corrisponde quindi ad un equivalente numero di coefficienti dct, ed è individuato all’interno del quadro, in base al suo indirizzo di riga e colonna.
Figure 18.37Codifica di un quadro P: a) struttura del macroblocco; b) procedura di codifica
Nella codifica dei quadri P, ogni macroblocco MT del quadro corrente (target) è confrontato pixel per pixel con il corrispondente macroblocco MR del quadro di riferimento, e nel caso sia riscontrata una sufficiente similitudine [827] [827]Il confronto è svolto considerando i soli valori di luminanza, e la similitudine valutata come media tra i valori assoluti delle differenze di luminanza. complessiva, viene trasmesso solo l’indirizzo del blocco. Altrimenti, il confronto viene ripetuto per tutti i possibili spostamenti del macroblocco target nell’ambito dei macroblocchi contigui [828] [828]l’effettiva estensione dell’area di ricerca non è oggetto di standardizzazione, mentre lo è la rappresentazione del risultato della ricerca., e qualora sia individuata una buona corrispondenza, il macroblocco viene codificato dal vettore di movimento V e dall’errore di predizione↓ MD. Con riferimento alla fig. 18.37↑b in cui l’immagine è simboleggiata da un cerchio, V rappresenta lo spostamento da applicare a MT per portarlo a coincidere al meglio con il quadro precedente, ed è codificato come una coppia (x,y) corrispondente ad una risoluzione di un pixel. Al contrario MD è composto dalle tre matrici (Y Cb Cr) dei valori differenza tra quelli di MT spostato di V, ed MR. I valori di V e di MD relativi ai diversi macroblocchi di un quadro seguono poi due diversi percorsi di codifica, come specificato appresso.
Nel caso in cui la regione di ricerca sia estesa, i valori V possono risultare relativamente grandi; d’altra parte è probabile che macroblocchi vicini esibiscano vettori di spostamento molto simili tra loro. Per questi motivi, la sequenza dei V calcolati per macroblocchi contigui viene prima sottoposta ad un processo di codifica differenziale, e quindi i valori di differenza sono rappresentati da codeword a lunghezza variabile di Huffman. D’altra parte, le tre matrici differenza sono invece sottoposte alla stessa sequenza di operazioni dei quadri I (dct, quantizzazione, codifica entropica), conseguendo però un fattore di compressione più elevato, essendo il macroblocco differenza con valori quasi tutti molto piccoli.
Nel caso in cui la stima di movimento fallisca [829] [829]Viene decretato il fallimento quando anche la migliore compensazione di movimento possibile non determina una riduzione della quantità di bit, rispetto ad una codifica jpeg. (o a causa di una estensione di ricerca insufficiente, oppure per un reale cambio di scena), il macroblocco è codificato in modo indipendente come avviene per i quadri I.
I macroblocchi dei quadri B (vedi fig. 18.38↑) sono invece confrontati sia con il precedente quadro MP che con il successivo MS, ottenendo due possibili insiemi di matrici differenza MD e M’D ed associati vettori VP e VS; viene inoltre calcolato un ulteriore insieme M’’D come differenza tra MR e la media dei marcoblocchi (spostati) di riferimento, e determinato infine quale delle tre possibilità fornisca il minimo errore di predizione. In base a questa scelta, si individua quale macroblocco differenza codificare, assieme ai rispettivi vettori di movimento. Nel caso prevalga la predizione basata sulla media tra macroblocchi di riferimento, il vettore di movimento complessivo può determinare un potere di risoluzione a livello di sub-pixel.
Figure 18.38Procedura di codifica dei quadri B
Questioni realizzative
La fig. 18.39↑ riassume la sequenza di operazioni applicate alle tre tipologie di quadro I, P e B. Mentre nel primo caso queste seguono lo schema previsto dalla codifica jpeg, i quadri P meritano qualche commento: allo scopo di alimentare correttamente il componente di stima di movimento, il codificatore mantiene memoria del quadro di riferimento, all’inizio posto pari ad un quadro I, e quindi sostituito da una copia dell’ultimo quadro P, ottenuto risommando il quadro differenza al precedente quadro di riferimento. Lo stesso schema di calcolo è svolto nel caso di quadri B, tenendo ora conto anche del quadro successivo.
Figure 18.39Stadi di elaborazione nella codifica di: a) quadri I; b) quadri P; c) quadri B
Rimarchiamo ora il fatto che, in funzione dell’esito del processo di stima di movimento, esistono tre diverse possibilità di rappresentazione per ogni macroblocco dei quadri P e B:

- se non vi è movimento, viene trasmessa solo la sua posizione;
- se vi è movimento e si trova un riferimento abbastanza simile, sono trasmessi il vettore di movimento e le matrici differenza;
- se non si è trovato un riferimento abbastanza simile, viene effettuata una codifica inter come per il caso dei quadri I.

Ciò determina l’esigenza di disporre di formato di trama di dimensione (e velocità) variabile, come realizzato nell’esempio mostrato in fig. 18.40↓, in cui ad ogni macroblocco è associato un tipo (I, P o B), il suo indirizzo nell’ambito del quadro, il coefficiente di quantizzazione relativo ai termini della dct, ed il vettore di movimento (se presente). Quindi si dichiara l’identità dei blocchi presenti (che potrebbero essere assenti in caso di immagini statiche), e per questi viene infine prodotta la sequenza di informazioni previste dalla codifica jpeg.
Figure 18.40Esempio di formato trama per i macroblocchi di un bitstream video

### 18.3.1Standard video

#### 18.3.1.1H.261↓

E’ lo standard di codifica video definito da itu-t a fine anni ’80 per le applicazioni di videotelefonia su isdn, ed anche se oggi tecnicamente superato, resta comunque un valido sistema di riferimento che consente la retro-compatibilità tra apparati [830] [830]Vedi ad es. `http://www0.cs.ucl.ac.uk/teaching/GZ05/08-h261.pdf` (una presentazione di Mark Handley), o la trattazione su `http://en.wikipedia.org/wiki/H.261`.. Il suo principale limite

Formato | Y | Cb, Cr
cif | 352 x 288 | 176 x 144
qcif | 176 x 144 | 88 x 72

è la necessità di produrre una velocità ridotta e vincolata a multipli di 64 kbps.
La scelta del formato di immagine è limitata a quanto mostrato in tabella [831] [831]Il Common Intermediate Format è stato pensato per facilitare la compatibilità con pal e ntsc; il Quarter-cif ha una superficie di 1⁄4. Sono poi stati anche definiti il 4cif e 16cif, oltre che il sif (352 x 240) che interopera con flussi mpeg., mentre la scansione è non interallacciata e la velocità di rinfresco di 30 quadri/secondo per cif oppure 15 o 7.5 per qcif. Sono usati solo quadri di tipo I e P, con un gop↓ di 4 (ossia 3 P ogni I), e sono usate le procedure descritte alla sezione precedente per rappresentare ogni quadro nei termini di macroblocchi composti da 16x16 pixel (4 blocchi di 8x8) di luminanza e 2 blocchi 8x8 per ogni componente di colore Cb, Cr.
Ogni macroblocco segue la tipica formattazione mostrata in fig. 18.41↑a; tre file di 11 macroblocchi sono poi raggruppati in una nuova struttura sintattica detta gob↓ (Group of (macro)Blocks), che si articola in un contenuto (fig. 18.41↑b) ed una intestazione (fig. 18.41↑c), in cui troviamo un codice di inizio scelto in modo da non poter essere presente nella sequenza di codici di Huffman che seguono, e che permette la risincronizzazione nel caso di gob mancanti (vedi appresso), in modo da poter tornare a riprodurre un quadro in corrispondenza del primo gob disponibile. L’intero quadro è quindi realizzato con il formato di fig. 18.41↑d), in cui compare un codice di inizio quadro, un riferimento temporale necessario alla sincronizzazione con la traccia audio, e l’indicazione del tipo di quadro (I o P); a cui segue la sequenza dei gob, in numero di 3 oppure 12 a seconda se il quadro rappresenti una immagine qcif o cif, in modo da permettere l’interoperabilità tra formati come mostrato in fig. 18.41↑e.
Figure 18.41Formato codifica H.261: a) macroblocco; b) costruzione e c) formato di un GOB; d) trama di quadro; c) interoperabilità tra formati
Controllo di velocità
Dato che la codifica video produce una velocità di trasmissione variabile↓, questa può eccedere la capacità del canale a disposizione, ed un modo drastico per risolvere il problema è di scartare alcuni gob. Il campo Group number dell’intestazione dei gob permette quindi di collocare il nuovo gob anche in mancanza dei suoi predecessori.
Un approccio più articolato è quello mostrato dalla figura 18.42↑a, che ripercorre le tappe già discusse e relative al calcolo del vettore di movimento ed alla codifica degli errori di predizione, ma pone in evidenza il campo di intervento di un componente di controllo quantizzazione, che variando l’entità dei coefficienti di quantizzazione della dct, permette di ridurre e/o aumentare la velocità di codifica complessiva.
Figure 18.42Principi della codifica H.261: a) schema del codificatore b) funzionamento del buffer fifo
In particolare, il controllo di quantizzazione opera in base alle stato di riempimento del buffer fifo↓ [832] [832]First in First out, è la disciplna di coda del primo arrivato primo servito, opposta a lifo Last In First Out, realizzata come uno stack. mostrato in fig. 18.42↑b, alimentato dal risultato del processo di codifica e formattazione video, e da cui sono prelevati i dati da inviare a velocità costante. Nel caso in cui la velocità media di codifica ecceda quella disponibile, l’aumento della occupazione del buffer determina l’aumento del coefficiente di quantizzazione, e quindi una riduzione di qualità ma anche della velocità media di codifica; ovviamente, anche l’inverso è possibile, ossia un miglioramento di qualità mediante riduzione del coefficiente di quantizzazione, nel caso in cui la scena sia statica, e la codifica produca un basso bit rate che consente alla fifo di svuotarsi.
Nel caso di un aumento improvviso di velocità, come anticipato si possono addirittura scartare alcuni gob, mentre per i successivi si adottano coefficienti di quantizzazione ridotti, comunicati anche al lato ricevente per mezzo dell’apposito campo della intestazione gob, come mostrato in fig. 18.41↑c.

#### 18.3.1.2H.263↓

Anche questo definito da itu-t a partire dal 1995, nasce per risolvere i problemi di bassa qualità dell’h.261 a velocità molto ridotte, come quelle offerte dai collegamenti modem dial-up precedenti all’introduzione dell’adsl, ovvero per migliorare la gestione delle possibili condizioni di errore sia sul canale dial-up che wireless. Le specifiche originarie si sono in seguito arricchite [833] [833]Nel 1998 viene rilasciato l’H.263v2, noto anche come H.263+ o H.263 1998, e nel 2000 è emesso l’H.263v3 noto anche come H.263++ o H.263 2000; inoltre l’MPEG-4 Part 2 è compatibile con l’H.263, in quanto un bitstream H.263 di base viene correttamente riprodotto da un decodificatore MPEG-4. di estensioni, favorendo l’adozione del codec da parte di altre applicazioni (inclusi i filmati di youtube), ed aggiungendo il supporto oltre che ai formati nativi cif e qcif, anche a s-qcif, 4cif, 16cif, sif e 4sif. A partire dal 2003 si è formato un gruppo di lavoro congiunto tra itu-t vceg (Video Coding Expert Group) e iso/iec mpeg (Moving Pictures Experts Group), che segue la definizione del suo successore, l’h.264 detto anche avc (Advanced Video Coding) o MPEG-4 part 10, determinando l’arresto dello sviluppo di h.263, che resta comunque (assieme all’h.261) supportato da un gran numero di applicazioni multimediali. Sebbene la struttura generale del codificatore e del bitstream ricalchi quella vista per l’h.261, sono state introdotte alcune novità significative, che tentiamo di elencare appresso.
Tipi di quadro
In h.263 sono usati, oltre ai quadri di tipo I e P, anche quelli bidirezionali B, consentendo di ottenere fattori di compressione maggiori, a parità di qualità percepita.
Slice
I gob sono ridefiniti come singole strisce di macroblocchi, quindi ad esempio per i formati cif e qcif un gob è ora formato da 11 macroblocchi in fila, anziché 33 come avveniva per l’h.261.
Vettori di movimento estesi
La stima di movimento dell’h.261 si arresta in corrispondenza dei bordi del quadro, per cui anche se un oggetto è solo parzialmente uscito di scena, il macroblocco corrispondente viene codificato in modalità intra. Al contrario h.263 permette di estendere la ricerca anche a vettori di spostamento che cadono al difuori del quadro, alla ricerca di una corrispondenza parziale, consentendo al contempo maggiore efficienza e minor distorsione.
Predizione avanzata
Anziché determinare il vettore di movimento in base al confronto di un intero macroblocco, i 4 blocchi 8x8 che lo costituiscono sono confrontati in modo indipendente con il quadro di riferimento, permettendo una migliore compensazione del movimento anche per l’immagine di oggetti che non solo traslano, ma si deformano. In definitiva, sono prodotti 4 diversi vettori di movimento per ogni macroblocco.
Resistenza agli errori
La presenza di un errore nella ricezione [834] [834]Qualcuno potrebbe aver notato che nella definizione degli standard fin qui discussi, non sono previsti controlli di tipo checksum nel bitstream prodotto. D’altra parte essendo le informazioni codificate di natura auto-sincronizzante, la presenza di errori determina presto presso il ricevitore una condizione di disallineamento, e la decodifica di valori non previsti, come ad esempio la ricezione di vettori di movimento o coefficienti dct fuori dinamica, o codeword di Huffman non valide, od un numero eccessivo di coefficienti. Per tale via, il ricevitore diviene in grado di accorgersi dell’errore che si è verificato. di un gob, oltre ad impedire la corretta riproduzione dello stesso, ostacola la riproduzione anche dei quadri successivi che dipendeno dai pixel presenti nel gob, e peggio ancora l’errore finisce per estendersi anche ad altri gob, in virtù degli effetti dell’errore sulla ricostruzione dei macroblocchi predetti in presenza di movimento.
Per ridurre l’estensione temporale dell’effetto dell’errore, e non dover attendere fino alla ricezione del successivo quadro I, si può usare il canale di ritorno presente nei collegamenti punto-punto, consentendo al decodificatore di inviare dei nack che notificano al mittente la coppia (quadro, gob) per la quale si è rilevato un errore. Il codificatore è quindi in grado di valutare esso stesso le conseguenze sui quadri successivi, e può provvedere a fornire una codifica intra per tutti i blocchi che necessitano di essere rapidamente risincronizzati.

#### 18.3.1.3MPEG-1↓

Il Moving Pictures Expert Group di iso emette una serie di standard ognuno orientato ad un particolare dominio applicativo di segnali multimediali, come

- mpeg-1 adotta un formato sif di 352x288 pixel inteso per la memorizzazione audio-video a qualità vhs su cdrom, a velocità fino a 1.5 Mbps;
- mpeg-2 è orientato alla memorizzazione e trasmissione audio-video secondo quattro livelli di risoluzione, per ognuno dei quali diversi profili individuano tecniche alternative di codifica;
- mpeg-4 è stato inizialmente concepito per applicazioni simili a quelle dell’h.263, ma il suo uso si è successivamente esteso ad un’ampia gamma di applicazioni Internet.

Anche mpeg-1 adotta tecniche del tutto simili a quelle dell’h.261, con una scansione dell’immagine progressiva ed un sottocampionamento delle componenti di colore 4:1:1, una frequenza di quadro di 25 Hz, l’adozione di quadri di tipo I, P e B, la rappresentazione dei quadri in termini di marcoblocchi composti da 16x16 pixel di luminanza, più due blocchi 8x8 per ciascuna componente di colore.
Esempio di sequenza di quadri mpeg-1
Le principali differenze sono che

- possono essere inseriti riferimenti temporali all’interno di un quadro, permettendo al decodificatore di sincronizzarsi più rapidamente. L’intervallo tra due marche temporali è chiamato slice e comprende una sequenza orizzontale di macroblocchi, tipicamente che copre una intera riga [835] [835]ad es., 22 macroblocchi in risoluzione cif, o meno, ma non di più;
- l’uso dei quadri di tipo B aumenta la distanza temporale tra i quadri di tipo P ed il loro riferimento, e quindi determina una maggiore distanza coperta dalle porzioni di immagine in movimento, cosicché l’ampiezza della finestra di ricerca adottata dal componente di detezione di movimento è stata estesa.

La figura 18.45↓a illustra la struttura gerarchica del bitstream risultante, secondo il quale l’intero filmato (sequenza) è costituito da una successione di gop, ed ogni gop da una sequenza di quadri, ognuno costituito da una successione di slice che comprendono ognuno 22 macroblocchi, ognuno con 6 blocchi. La sezione b di fig. 18.45↓ entra più nel dettaglio del formato del bitstream.
Figure 18.45Struttura del bitstream mpeg-1: a) composizione; b) formato gerarchico

#### 18.3.1.4MPEG-2↓

Livello | formato | bit rate | applicazione
mpeg-2 |  | (Mbps) |
Low | sif | < 1.5 | registrazione
|  |  | qualità vhs
Main | 4:2:0 | < 15 | dvb - mp@ml
| 4:2:2 | < 20 |
High 1440 | 4:2:0 | < 60 | hdtv 4/3
| 4:2:2 | < 80 |
High | 4:2:0 | < 80 | hdtv 16/9
| 4:2:2 | < 100 |

####

Allo scopo di poter usare questo stesso standard per diversi contesti applicativi, sono stati definiti i quattro livelli qualitativi mostrati in tabella, e per ognilivello sono quindi definiti cinque profili (simple, main, spatial resolution, quantization accuracy, high) in modo da permettere lo sviluppo di nuove tecnologie. Il livello Low è compatibile con mpeg-1. Affrontiamo ora la descrizione di ciò che è offerto dal profilo Main al livello Main (MP@ML).
MP@ML
L’obiettivo è la diffusione televisiva dvb, con scansione interallacciata, risoluzione 720x576 a 25 quadri/secondo (pal), sottocampionamento 4:2:0 per una velocità risultante tra i 4 ed i 15 Mbps. La principale differenza rispetto all’mpeg-1 è legata alla modalità di scansione interallacciata, in modo che come mostrato in fig. 18.46↑, ogni quadro è costituito da due sottoquadri (o campi) con le righe rispettivamente dispari e pari, ponendo la questione: come comporre i blocchi da 8x8 pixel su cui eseguire la dct?
Figure 18.46Effetto della scansione interallacciata in mpeg-2
Sono possibili due alternative:

- la modalità campo (fig. 18.47↓a) in cui i 16x16 pixel di un macroblocco sono ripartiti tenendo assieme prima le sole righe dispari del primo campo, e quindi le sole righe pari del secondo campo, oppure
- la modalità quadro (fig. 18.47↓b) in cui si usa la stessa suddivisione già vista per il caso non interallacciato, mescolando i due campi in ognuno dei blocchi.

Figure 18.47Composizione dei blocchi dct per i quadri I di mpeg-2: a) modalità campo; b) modalità quadro
La scelta migliore su quale tra le due modalità adottare dipende dal tipo di scena che si sta rappresentando. Se è presente molto movimento, è meglio adottare la modalità campo: essendo infatti i pixel di uno stesso blocco collezionati in un tempo pari a metà dell’intervallo di quadro (mentre nella seconda metà si collezionano i pixel della seconda serie di blocchi), si ottiene un fotogramma meno mosso; viceversa in presenza di una scena con poco movimento, può essere adottata la modalità quadro.
Per quanto riguarda la stima di movimento, sono ora previste tre possibilità: la modalità campo prevede che i campi dispari usino come riferimento i campi pari del quadro precedente, ed i campi pari quelli dispari dello stesso quadro: in tal modo l’intevallo temporale su cui è valutato il movimento è metà del periodo di quadro. Nella modalità quadro invece, i campi pari e dispari usano come riferimento i rispettivi campi pari e dispari del quadro precedente, ed è più idoneo nel caso di movimenti lenti. Il meglio di entrambi i modi si ottiene con la modalità mista, in cui sono attuati entrambi gli approcci, e viene scelto per la trasmissione quello in grado di dar luogo alla distorsione minore.
HDTV↓
Sono definiti tre standard, atv, dvb e muse, rispettivamente per il Nord America, l’Europa ed il Giappone, a cui si aggiunge la specifica hdtv di itu-r relativa a studi di produzione e scambio internazionale, e che definisce un rapporto di aspetto 16/9 con 1920 colonne per 1152 righe (di cui solo 1080 visibili), con scansione interallacciata e sottocampionamento 4:2:2. atv include le specifiche di itu-r, oltre che un formato ridotto, sempre con aspetto 16/9 ma risoluzione 1280x720, e che adotta la codifica video mpeg-2 mp@ml e quella audio ac-3. Il dvb è basato su di un rapporto di aspetto 4/3 con 1440x1152 pixel (di cui 1080 visibili), pari cioè al doppio della risoluzione pal di 720x576. La codifica video è mpeg-2 ssp@h1440 (Spatially Scaleable Profile at High 1440), simile all’mp@ml, mentre la codifica audio è mpeg audio layer 2.

### 18.3.2Contenitori

I flussi binari prodotti dai diversi codificatori (audio, video) prendono il nome di Elementary Stream↓ (es), e possono essere multiplati assieme per produrre un nuovo formato idoneo alla registrazione di un contenuto multimediale completo, eventualmente arricchito da un flusso di dati privati, come mostrato in fig. 18.48↑a per il caso di mpeg-1.
Figure 18.48Generazione di un contenuto multimediale mpeg-1: a) co-decodificatore; b) formato del bistream di uscita
Prima di effettuare la multiplazione, gli es sono suddivisi in pacchetti di dimensione variabile denominati Packetized es (pes↓) in cui trova posto un payload contenente [836] [836]Per un approfondimento, vedi `http://en.wikipedia.org/wiki/Packetized_elementary_stream` il risultato della codifica (ad es. un intero quadro), preceduto da una intestazione contenente un codice univoco di inizio pes ed un codice che individua il tipo di payload del pacchetto (audio, video o dati). L’intestazione pes può inoltre contenere un riferimento temporale necessario alla sincronizzazione audio-video, con risoluzione 33 bit, prodotto
dal clock a 90 kHz descritto in fig. 18.48↑ come orologio di sistema, e ottenuto a partire da un oscillatore a 27 MHz come mostrato alla figura a lato.
Nel momento in cui un es è pacchettizzato, viene inserito un presentation timestamp (pts) che ne individua l’istante di riproduzione; per i flussi video è inserito anche [837] [837]In realtà pts e dts non sono inseriti in tutti i pacchetti, ma una volta ogni tanto (con intervalli fino a 700 msec per i ps e 100 msec per i ts): il decoder rigenera infatti localmente il clock, ed i timestamp ricevuti servono a mantenerlo al passo con quello trasmesso. un decode timestamp (dts) perché come anticipato a pag. 1↑ l’ordine di trasmissione (e quindi di decodifica) può differire dall’ordinamento naturale.
I pes derivanti da diversi es possono essere quindi inseriti in una struttura di trama detta Pack, che può infine essere memorizzata ai fini di una successiva riproduzione.

#### 18.3.2.1Transport Stream↓

Nel caso di trasmissione dei contenuti mediante un sistema broadcast, tipicamente il singolo Program Stream ps (equivalente a quello prima indicato come Pack) viene ulteriormente multiplato assieme ad altri, in modo da realizzare un Transport Stream (ts), come mostrato in fig. 18.50↑. In particolare, la parte b) della figura mostra come i pes siano ora suddivisi in segmenti di lunghezza fissa e pari a 184 byte, intestati con 4 byte, producendo una struttura di trama con pacchetti di 188 byte [838] [838]in realtà le intestazioni dei pacchetti del ts possono essere estese e contenere più di 4 byte: in questo caso, la dimensione del paylod si riduce, in modo che il totale sia ancora 188.; l’ultimo pacchetto del ts che origina da uno stesso pes è riempito con uni fino a raggiungere i 188 byte. L’intestazione contiene, oltre ad un byte di inizio con pattern unico, un Packet IDentification code (pid) di 13 bit, che identifica il pes a cui appartiene il pacchetto, permettendo al decoder di recuperare il programma a cui è interessato.
Figure 18.50Multiplazione di programmi: a) generazione dei PS e TS; b) formato del Transport Stream
Alcuni pid sono riservati, come il pid 8191 che indica assenza di payload [839] [839]Un payload vuoto è in realtà comunque riempito di 184 bytes inutili, e viene inserito da parte del multiplatore che realizza il ts per mantenere una riserva di banda che consenta di assecondare le fluttazioni di velocità dei tributari., ed il pid 0, che annuncia l’inserimento nel payload della Program Association Table (pat), la cui ricezione permette al decoder di conoscere quali pid sono utilizzati per individuare i diversi pes (audio, video) di uno stesso programma [840] [840]Altri pid riservati sono l’uno, che annuncia la presenza di una Conditional Access Table (cat) contenente i parametri crittografici per visualizzare contenuti a pagamento, ed il pid 18, che annuncia la presenza della Network Information Table (nit), che descrive altri ts disponibili. Per approfondimenti, vedi `http://en.wikipedia.org/wiki/Program-specific_information`.. Questo avviene per mezzo delle Program Map Table (pmt) rappresentate in fig. 18.51↓: ogni riga della pat individua infatti un nuovo pid, alla ricezione del quale, viene estratta dal payload la pmt che descrive i pid dei flussi che compongono il programma. Pertanto, quando uno spettatore seleziona un programma, il decodificatore cerca nella pat il pid della pmt associata, e quindi inizia a prelevare i pacchetti intestati con ognuo dei pid trovati nella pmt, per riscostruire i relativi pes, sincronizzarli, ed iniziare la riproduzione.
Figure 18.51Estrazione della pat e delle pmt dal Transport Stream
PrecSezione 18.2: Codifica di immagine SuCapitolo 18: Codifica di sorgente multimediale Capitolo: BibliografiaSegue